package com.example.roleplay.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Set;

/**
 * AI角色实体
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Persona {
    
    /**
     * 角色唯一标识
     */
    private String id;
    
    /**
     * 角色名称
     */
    private String name;
    
    /**
     * 地区语言代码，如 "zh-CN", "en-US"
     */
    private String locale;
    
    /**
     * 角色描述
     */
    private String description;
    
    /**
     * 角色风格设定
     */
    private PersonaStyle style;
    
    /**
     * 角色拥有的技能集合
     */
    private Set<Skill> skills;
    
    /**
     * 系统提示词模板
     */
    private String systemPrompt;
    
    /**
     * 是否启用
     */
    private boolean enabled;

    /**
     * 角色风格内部类
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class PersonaStyle {
        /**
         * 语调风格描述
         */
        private String tone;
        
        /**
         * 角色口癖/常用语
         */
        private List<String> catchphrases;
        
        /**
         * 情感倾向，1-10分
         */
        private int emotionalTone;
        
        /**
         * 正式程度，1-10分，1最随意，10最正式
         */
        private int formalityLevel;
        
        /**
         * TTS语音名称
         */
        private String voiceName;
    }

    /**
     * 检查角色是否拥有指定技能
     */
    public boolean hasSkill(Skill skill) {
        return skills != null && skills.contains(skill);
    }

    /**
     * 获取角色的主要技能（用于展示）
     */
    public Skill getPrimarySkill() {
        if (skills == null || skills.isEmpty()) {
            return Skill.MEMORY; // 默认技能
        }
        return skills.iterator().next();
    }

    /**
     * 获取角色标签（用于搜索和分类）
     */
    public List<String> getTags() {
        return List.of(
            name.toLowerCase(),
            locale,
            style.getTone().toLowerCase(),
            getPrimarySkill().getDisplayName()
        );
    }
}